//
// Created by ZYZ on 2020/6/15.
//

#include <stdio.h>
#include <stdlib.h>
#include "stack_use3_line_edit.h"
#include "linear_stack.h"

#ifdef SELEMTYPE_INT
void LineEdit() {

    SqStack stack;
    //利用字符栈 S，从终端接收一行并传送至调用过程的数据区。
    InitStack(stack);                                       //构造空栈 S
    int ch = getchar();                                     //从终端接收第一个字符

    while (ch != EOF) {                                     //EOF 为全文结束符
        while (ch != EOF && ch != '\n') {
            switch (ch) {
                case '#':
                    Pop(stack, ch);                          //仅当栈非空时退栈
                    break;

                case '@':
                    ClearStack(stack);                      //重置 S 为空
                    break;

                default:
                    Push(stack, ch);
                    break;                                  //有效字符进栈，未考虑栈满情形
            }
            ch = getchar();                                 //从终端接收下一个字符
        }

        //伪代码: 将从栈底到栈顶的栈内字符传送至调用过程的数据区；

        ClearStack(stack);                                  //重置 S 为空栈

        if (ch != EOF)
            ch = getchar();

        DestroyStack(stack);
    }
}// LineEdit
#endif